6.6.4. İki Yönlü Listede Silme/ Listeden Çıkarma İşlemi

İki-yönü bağlantılı listeden düğüm silme/koparma işlemi aşağıdaki şekilde gösterildiği gibi yapılır. Eğer koparılan ilk düğümse, listenin başını tutan ilk2 adlı işaretçinin içeriği de değiştirilmelidir. Aradaki bir düğümse, hemen önündeki ve arkasındaki uç düğümlerle bağlantısı koparılmalı ve daha sonra bu iki uç düğüm kendi aralarında bağlanmalıdır.


Fonksiyon-6.10. İki Yönlü bağlantılı listeden düğüm silme

/* düğüm silme fonksiyonu */
BLISTE2 *silme(int silinen)
{
     BLISTE2 *p;

     p=arama(silinen);
     if(p==NULL)
          return NULL;

     if(ilk2==p) { /* ilk düğüm mü? */
          if(ilk2->arka!=NULL) { /* listede birden çok düğüm var */
               ilk2=p >arka;
               ilk2 >on=NULL;
          }
          else { /* listede yalnızca bir düğüm var */
                    ilk2=NULL;
                    son2=NULL;
               }
     }
     else { /* aradan bir düğüm mü? */
               p >on >arka=p >arka;
               if(p==son2) /* silinen son düğüm ise */
                    son2=son2 >on;
               else
               p >arka->on=p->on;
          }
     free(p);
     return p;
}